from django.db.models import ForeignKey
from django.shortcuts import render
from rest_framework import viewsets, status
from rest_framework.decorators import action

from rest_framework.serializers import Serializer

from .models import Student,Classes
from .serializers import StudentSerializer, ClassesSerializer
from rest_framework.response import Response
# Create your views here.


# 学生的视图类
# class StudentViewSet(viewsets.ViewSet):
#     # 查看所有学生
#     def list(self,request):
#         # 从模型得到学生数据  所有学生  查询集 [(模型对象)，()..]
#         students = Student.objects.filter(is_delete=False)
#         # 通过序列器进行序列化 吧查询集转json格式
#         # many=True 代表多条数据 转json格式数据
#         # 序列器对象
#         serializer = StudentSerializer(students,many=True)
#         # 相应出来 serializer.data
#         # data 属性保存了序列化后的数据  data存储是json格式数据
#         print(type(serializer.data))
#         return  Response(serializer.data)
#
#     def create(self,request):
#         # 添加学生
#         # 学生信息从客户端传入的 json数据
#         # =request.data
#         # 进行反序列化  吧json转python数据
#         serializer = StudentSerializer(data = request.data)
#         # 校验数据  # 报错异常  raise_exception=True
#         serializer.is_valid(raise_exception=True)
#         # 数据保存的时候  首先检查 instance是否为空 为空 create创建操作
#         # 如果不为空 则执行 update 修改操作
#         serializer.save()
#         # 展示数据
#         return Response(serializer.data, status=status.HTTP_201_CREATED)
#
#     def retrieve(self,request,pk):
#         # 查询学生 模型对象
#         try:
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#         except Student.DoesNotExist:
#             return Response(status=status.HTTP_404_NOT_FOUND)
#         # 序列化
#         serializer = StudentSerializer(student)
#         # 相应
#         return Response(serializer.data)
#
#     def update(self,request,pk):
#         # 查询学生 模型对象
#         try:
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#         except Student.DoesNotExist:
#             return Response(status=status.HTTP_404_NOT_FOUND)
#         # 从客户端得到数据反序列化
#         serializer = StudentSerializer(instance=student,data=request.data)
#         # 数据校验
#         serializer.is_valid(raise_exception=True)
#         # 数据保存
#         serializer.save()
#         # 相应 修改后的序列化后的数据
#         return Response(serializer.data)
#
#     def destroy(self,request,pk):
#         # 查询学生 模型对象
#         try:
#             # student实例对象 (模型对象)
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#         except Student.DoesNotExist:
#             return Response(status=status.HTTP_404_NOT_FOUND)
#
#         # 自定义一个逻辑删除方法
#         student.delete()
#         # 返回相应 删除完没有数据
#         return Response(status=status.HTTP_204_NO_CONTENT)


class StudentViewSet(viewsets.ModelViewSet):
    # 查询集
    queryset = Student.objects.filter(is_delete=False)
    # 序列化器
    serializer_class = StudentSerializer

# ModelViewSet 提高增删改查（单一） 方法
class ClassesViewSet(viewsets.ModelViewSet):
    # 定义 需要操作的查询集
    queryset = Classes.objects.filter(is_delete=False)
    # 使用哪一个序列化器对数据 进行序列化及反序列化
    serializer_class = ClassesSerializer

    #查询集 [(id:模型对象),(模型对象),(模型对象)]
    #(模型对象)

    # @action  定义额外的路由和请求方法
    # 如果携带id  参数进行决定  detail = True  带id  反之
    # 额外的方法 查看第一个班级的信息
    # 请求方式   pk  路径名（firsts）
    # 127.0.0.1:8000/drfstudy/classes/firsts
    @action(methods=['get'], detail=False)
    def firsts(self,request):
       # 得到班级信息
       # firsts_classes = Classes.objects.filter(is_delete=False).first()
       # self.get_queryset() == Classes.objects.filter(is_delete=False)
       firsts_classes = self.get_queryset().first()
       # 进行序列化返回
       # serializer = ClassesSerializer(firsts_classes)
       serializer = self.get_serializer(firsts_classes)
       # data 里面存储json
       return Response(serializer.data)

    # http://127.0.0.1:8000/drfstudy/classes/1/find_classes/
    @action(methods=['get'], detail=True)
    # 查看指定班级的信息的最后一个学生信息
    def find_classes(self,request,pk):
        try:
            classes = Classes.objects.filter(is_delete=False).get(id=pk)
        except Classes.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)

        # 得到最后一个学生信息
        student = classes.student_set.last()
        serializer = self.get_serializer(student)
        # data 里面存储json
        return Response(serializer.data)





